package com.kodcu.service;
import javafx.application.Platform;
import java.util.Objects;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionStage;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.function.Supplier;
/**
* Created by usta on 14.06.2016.
*/
public class FxCompletableFeature<T> extends CompletableFuture {
public <U> FxCompletableFeature<U> supplyAsyncFx(Supplier<U> supplier) {
FxCompletableFeature<U> fxCompletableFeature = new FxCompletableFeature<>();
super.supplyAsync(() -> {
Platform.runLater(() -> {
try {
U u = supplier.get();
fxCompletableFeature.complete(u);
} catch (Exception ex) {
fxCompletableFeature.completeExceptionally(ex);
}
});
return (U) fxCompletableFeature.join();
});
return fxCompletableFeature;
}
public FxCompletableFeature<Void> thenRunFx(Runnable action) {
FxCompletableFeature<Void> fxCompletableFeature = new FxCompletableFeature<>();
super.thenRun(() -> {
Platform.runLater(() -> {
try {
action.run();
fxCompletableFeature.complete(null);
} catch (Exception ex) {
fxCompletableFeature.completeExceptionally(ex);
}
});
});
return fxCompletableFeature;
}
@Override
public FxCompletableFeature<Void> thenAcceptAsync(Consumer action) {
FxCompletableFeature<Void> fxCompletableFeature = new FxCompletableFeature<>();
super.thenAcceptAsync(o -> {
try {
action.accept(o);
fxCompletableFeature.complete(o);
} catch (Exception ex) {
fxCompletableFeature.completeExceptionally(ex);
}
});
return fxCompletableFeature;
}
}